define(["jquery","template","dg/datagride.config","dg/datagride.servers","dg/datagride.tpl","dg/datagride.attention"],
	function($,template,$config,$servers,$tpl,$attention){
	var datagride = {};

	/**
	 * 事件
	 */
	// head里的事件
	var headEvent = function(params){
		var questTypeArr = $config.getAllQuestType();
		for (var i=0; i < questTypeArr.length; i++) {
			var $quest = $config.getQuest(questTypeArr[i]);
			if( $quest.event && typeof $quest.event == "object" && $quest.event.head && typeof $quest.event.head == "function" )
			$quest.event.head(params);
		}
	}
	// content里的事件
	var contentEvent = function(params){
		var questTypeArr = $config.getAllQuestType();
		for (var i=0; i < questTypeArr.length; i++) {
			var $quest = $config.getQuest(questTypeArr[i]);
			if( $quest.event ) { // 存在事件时
				if( typeof $quest.event == "function" ){ // 只有content里有事件处理
					$quest.event(params);
				}else if( typeof $quest.event == "object" ){ // head和content里都有事件处理
					if( $quest.event.content && typeof $quest.event.content == "function" ) 
					$quest.event.content(params); 
				}
			}

		}
	}

	/**
	 * 初始化
	 */
	// 表格里的表头初始化
	var headInitUi = function(options){
		var data = $servers.formatHeadData(options.questions);
		$("#"+options.id).html( $tpl.headInit(data.direction) );
		var html = template("tpl_table_total",data);
		$("#"+options.id).html(html);
	}
	/**
	 * [headInit 表头初始化]
	 * @param  {[object]} options [参数]
	 *    id: dom元素的id；
	 *    questions: 问卷json报文；
	 *    event: 表头事件参数
	 */
	datagride.headInit = function(options){
		headInitUi(options);
		headEvent(options.event);
	}

	// 表格里的内容部分content初始化（相当于setValue）
	var contentInitUi = function(options){
		var data = $servers.formatContentData(options.questions,options.values);
		options.dom.html( $tpl.contentInit(data.direction) );
		var html = template("tpl_table_content",data);
		options.dom.html(html);
	}
	/**
	 * [contentInit 内容初始化]
	 * @param  {[object]} options [参数]
	 *    id: dom元素的id；
	 *    questions: 问卷json报文；
	 *    values：答案；
	 *    event: 内容事件参数
	 */
	datagride.contentInit = function(options){
		contentInitUi(options);
		$attention.init();
		contentEvent(options.event);
	}

	return datagride;
});